﻿using System;
using System.Collections.Generic;
using DATA;
using DATA.Base;
using DATA.BusinessObjects;
using DATA.ManagerObjects;
using NHibernate;

namespace BUS
{
    public class PhongBUS
    {
        #region Len - Lay danh sach phong
        public static IList<Phong> LayDanhSachPhong()
        {
            IList<Phong> lstPhong = null;
            try
            {
                IManagerFactory iMF = new ManagerFactory();
                IPhongManager iPhong = iMF.GetPhongManager();
                lstPhong = iPhong.GetAll();
            }
            catch (Exception ex)
            {
                
                throw new Exception("Lỗi, lấy danh sách khách hàng null", ex);
            }
            return lstPhong;
        }
        #endregion

        #region Bình - cập nhật phòng
        public static Boolean CapNhatPhong(Phong p)
        {
            Boolean flag = false;
            ISession isession = NHibernateSessionManager.Instance.Session.GetISession();
            ITransaction iTrans = null;
            try
            {
                iTrans = isession.BeginTransaction();
                isession.Update(p);
                iTrans.Commit();
                flag = true;
            }
            catch (Exception ex)
            {
                iTrans.Rollback();
                isession.Close();
                throw new Exception("Lỗi, không cập nhật được phòng", ex);
            }

            return flag;
        }
        #endregion

        #region Binh - Lấy phòng cuối cùng
        public static Phong LayPhongCuoiCung()
        {
            Phong p = null;
            IManagerFactory MF = new ManagerFactory();
            IPhongManager KHM = MF.GetPhongManager();
            String hql = "FROM Phong p "
                        + "WHERE length(p.Id) = (Select MAX(length(p.Id)) "
                                                + "from Phong p) "
                        + "ORDER BY p.Id desc";

            IList<Phong> list = KHM.GetByQuery(hql);
            p = list[0];
            return p;
        }
        #endregion

        #region Lên - Thêm phòng mới(Tiếp nhận phòng)
        public static bool ThemPhong(Phong phong)
        {
            bool flag = false;
            ISession isession = NHibernateSessionManager.Instance.Session.GetISession();
            ITransaction iTrans = null;
            try
            {
                iTrans = isession.BeginTransaction();
                isession.Save(phong);
                iTrans.Commit();
                flag = true;
            }
            catch (Exception ex)
            {
                iTrans.Rollback();
                throw new Exception("Lỗi, không thêm được phòng", ex);
            }
            return flag;
        }
        #endregion

        #region Lên - Tìm kiếm phòng theo nhiều tiêu chí
        public static IList<Phong> TimKiemPhong(Timkiem ob)
        {
            IList<Phong> lstPhong = null;
            try
            {
                IManagerFactory iMF = new ManagerFactory();
                IPhongManager iPhong = iMF.GetPhongManager();

                // Tìm kiếm Phòng từ bảng phòng
                string sql = "FROM Phong P WHERE 1=1";
                if (ob.MaPhong != null)
                {
                    sql += " AND P.Id = '" + ob.MaPhong + "'";
                }
                if (ob.TenPhong != null)
                {
                    sql += " AND P.TenPhong = '" + ob.TenPhong + "'";
                }
                if (ob.TenLoaiPhong != null)
                {
                    sql += " AND P.Loaiphong.Id = '" + ob.TenLoaiPhong + "'";
                }
                if (ob.TinhTrangPhong != -1)
                {
                    sql += " AND P.TinhTrangPhong = '" + ob.TinhTrangPhong + "'";
                }
                if (ob.GiaPhongTu > 0)
                {
                    sql += " AND P.Loaiphong.DonGia >= '" + ob.GiaPhongTu + "'";
                }
                if (ob.GiaPhongDen > 0)
                {
                    sql += " AND P.Loaiphong.DonGia <= '" + ob.GiaPhongDen + "'";
                }
                IList<Phong> lst1  = iPhong.GetByQuery(sql);

                // Tìm kiếm  phòng từ phiếu thuê phòng
                string sql2 = "SELECT ptp.Phong FROM Phieuthuephong ptp WHERE 1=1";
                if (ob.NgayThuePhong != null)
                {
                    sql2 += " AND ptp.NgayThuePhong >= '" + ob.NgayThuePhong + "'";
                }
                if (ob.NgayTraPhong != null)
                {
                    sql2 += " AND ptp.NgayTraPhong <= '" + ob.NgayTraPhong + "'";
                }
                IList<Phong> lst2 = iPhong.GetByQuery(sql2);

                // Xử lý gom 2 list lại thành 1 list.
                lstPhong = lst1;
                if (lst2 != null)   // list 2 cung co ket qua
                {
                    for (int i = 0; i < lst2.Count; i++)
                    {
                        Phong p = lst2[i];
                        lstPhong.Add(p);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Lỗi, không lấy được danh sách phòng cần tìm",ex);
            }
            return lstPhong;
        }
        #endregion

        #region Lên - Lấy phòng theo mã phòng
        public static Phong LayPhongTheoMaPhong(string maPhong)
        {
            Phong phong = null;
            try
            {
                IManagerFactory iMF = new ManagerFactory();
                IPhongManager iPhong = iMF.GetPhongManager();
                phong = iPhong.GetById(maPhong);
            }
            catch (Exception ex)
            {
                throw new Exception("Lỗi, không lấy được phòng", ex);
            }
            return phong;
        }
        #endregion
    }
}
